/**
 * $Revision: 1.0 $
 * $Author: Eric Yang $
 * $Date: Aug 21, 2009 10:28:15 PM $
 *
 * Author: Eric Yang
 * Date  : Aug 21, 2009 10:28:15 PM
 *
 */
package com.gooex.domain.base;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.gooex.domain.organization.User;

/**
 * 商品/服务<br>
 * 在订单创建之前填写,如果已经有基于此商品的订单，则此商品/服务不可更改。
 * 
 * @author Eric Yang
 * @version 1.0
 */
public class Product implements Serializable {
	/** PK */
	private String id;

	/**
	 * 是否进过审核<br>
	 * 现在商品修改为用户可以添加商品，但是需要系统管理员审核，方能在页面上显示。
	 */
	private boolean raw = true;

	/** 商品名称 */
	private String name;

	/** 商品介绍 */
	private String introduction;

	/** 商品图片地址 */
	private String imagePath;

	/** 市场价 */
	private BigDecimal marketPrice;

	/** 创建人 */
	private User user;

	/** 更新时间 */
	private Date updateTime;

	/**
	 * 商品所属类别 <br>
	 * 该类别应该是叶子类别
	 */
	private Category category;

	/**
	 * 商品参数列表<br>
	 * 1.参数只针对产品;<br>
	 * 2.发布商品的时候不需要精确具体的产品参数,比如颜色、尺寸等.<br>
	 * 3.客户下订单的时候,列出这些参数供客户选择<br>
	 */
	private List<Property> properties = new ArrayList<Property>();

	/* ===========functions============================= */
	/** 添加参数 */
	public void addProperty(Property value) {
		if (!properties.contains(value))
			properties.add(value);
	}

	/** 删除参数 */
	public void removeProperty(Property value) {
		if (properties.contains(value))
			properties.remove(value);
	}

	public String getFullName() {
		if (getCategory() == null)
			return name;
		return getCategory().getChainName() + " " + name;
	}

	public boolean canCreateOrder() {
		return !raw;
	}

	/* ===========setter/getter============================= */

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getIntroduction() {
		return introduction;
	}

	public void setIntroduction(String introduction) {
		this.introduction = introduction;
	}

	public String getImagePath() {
		return imagePath;
	}

	public void setImagePath(String imagePath) {
		this.imagePath = imagePath;
	}

	public BigDecimal getMarketPrice() {
		return marketPrice;
	}

	public void setMarketPrice(BigDecimal marketPrice) {
		this.marketPrice = marketPrice;
	}

	public Date getUpdateTime() {
		return updateTime;
	}

	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}

	public List<Property> getProperties() {
		return properties;
	}

	public void setProperties(List<Property> properties) {
		this.properties = properties;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Category getCategory() {
		return category;
	}

	public void setCategory(Category category) {
		this.category = category;
	}

	public boolean isRaw() {
		return raw;
	}

	public void setRaw(boolean raw) {
		this.raw = raw;
	}
}
